package com.cn.mapper;

import com.cn.pojo.User;
import org.apache.ibatis.annotations.MapKey;

import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 3.1 查询操作详解
 */
public interface UserMapper {
    /**
     * 3.1.1 查询单行数据，返回单个对象
     * @param id
     */
    User selectById(int id);

    /**
     * 3.1.2 查询多行数据，返回List集合
     * @return
     */
    List<User> queryAllUser();

    /**
     * 3.1.3 统计记录条数
     */
    Integer getUserCount();

    /**
     * 3.1.4 查询单行数据，返回Map集合
     * 表中的字段作为Map的键，字段对应的值作为Map的值
     */
    Map<String,Object> queryUserMapById(Integer id);


    /**
     * 3.1.5 查询多行数据，返回Map集合
     * 将表中的某个字段作为Map的键，将表中的每条记录转换为JavaBean后作为Map的值。
     * 使用@MapKey注解指定Map的键，将表中的某个字段作为Map的键。
     */
    @MapKey("id")
    Map<Integer,Object> queryAllUserMap();

    /**
     * 3.1.6 模糊查询
     * '%${username}%'：直接插入变量值，不安全，易受 SQL 注入攻击。
     * CONCAT('%', #{username}, '%')：推荐使用，安全，避免 SQL 注入。
     * "%"#{username}"%"：不正确的用法，通常会导致语法错误。
     */
    List<User> queryUsersByLike(String username);

}
